<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <!-- 
        1、每个对象都有prototype即显示原型属性，默认指向一个空的object对象
        2、每个实例都有一个__proto__属性，可称为隐式原型
        3、对象的隐式原型值为其构造函数的显示原型的值
        4、函数的prototype属性在定义函数时自动添加，默认值是一个object对象
        5、函数实例对象的__propo__属性在实例对象时自动添加，默认值为构造函数的prototype属性值
        6、程序员能直接操作显示原型但是不能操作隐式原型(ES6之前)
     -->
  
     <script>
        function Fun () { // 创建函数对象的时候执行了this.prototype = {}

        }
        console.log(Fun.prototype)  // 每个对象都有prototype即显示原型属性，默认指向一个空的object对象

        const fun = new Fun()  // 实例化对象的时候内部执行了 this.__proto__=Fn.prototype
        console.log(fun.__proto__)  // 每个实例都有一个__proto__属性，可称为隐式原型

        console.log(fun.__proto__ === Fun.prototype)  // true 对象的隐式原型值为其构造函数的显示原型的值

        Fun.prototype.test = function () {  // 给原型对象添加方法
            console.log('test()')
        }

        fun.test()
     ;</script>
</body>
</html>